package com.edu.controller;

import com.edu.bean.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.validation.support.BindingAwareModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

@Controller
public class RequestController {

    /**
     * 向 request作用域中 存放数据的方式
     *  1.直接在方法里 加上 一个 HttpServletRequest对象，
     *    通过request.setAttribute()存入
     */
    @RequestMapping("/request1")
    public String request1(HttpServletRequest request){
        request.setAttribute("msg","这是通过 request对象 直接放入到request作用域的数据");
        return "forward:test.jsp";
    }

    /**
     *  方式二:向 方法中 加入一个 Map对象
     *   直接向map中 存入数据
     *
     */

    @RequestMapping("/request2")
    public String request2(Map map){
        System.out.println(map.getClass());
        map.put("msg","这是通过map集合存入request中的数据");
        return "forward:test.jsp";
    }

    /**
     *  方式三:向 方法中 加入一个 Model对象
     *   直接向model中 存入数据
     */
    @RequestMapping("/request3")
    public String request3(Model model){
        System.out.println(model.getClass());
       model.addAttribute("msg","这是通过model对象放入到request中的数据");
       return "forward:test.jsp";
    }


    /**
     *  方式四:向 方法中 加入一个 ModelMap对象
     *   直接向modelMap中 存入数据
     */
    @RequestMapping("/request4")
    public String request4(ModelMap modelMap){
        System.out.println(modelMap.getClass());
        modelMap.addAttribute("msg","通过modelMap存入request的数据");
        return "forward:test.jsp";
    }

    /**
     *  方式五:向 方法中 加入一个 ModelMap对象
     *   直接向modelMap中 存入数据
     */
    @RequestMapping("/request5")
    public String request5(BindingAwareModelMap modelMap){
        System.out.println(modelMap.getClass());
        modelMap.put("msg","BindingAwareModelMap");
        return "forward:test.jsp";
    }


    /**
     *  方式五:向 方法中 加入一个 ModelAndView对象
     *   直接向modelMap中 存入数据
     */
    @RequestMapping("/request6")
    public ModelAndView request6(ModelAndView modelAndView){
        modelAndView.addObject("msg","这是通过modelAndView存放的数据");
        modelAndView.setViewName("forward:test.jsp");
        return modelAndView;
    }

    @RequestMapping("/request7")
    public ModelAndView request7(){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("msg","这是通过modelAndView存放的数据");
        modelAndView.setViewName("forward:test.jsp");
        return modelAndView;
    }

    @RequestMapping("/request8")
    public String request8(int userId,String username,String password){
       return "forward:user.jsp";
    }


    @RequestMapping("/request9")
    public String request8(User user){
        return "forward:user.jsp";
    }

}
